package com.gustavo.sistema.service;

import java.io.Serializable;

import javax.annotation.Resource;
import javax.enterprise.context.RequestScoped;
import javax.transaction.UserTransaction;

	@RequestScoped
	public abstract class Service implements Serializable {

		/**
		 * Objeto que representa o controle das transações com rollback
		 */
		@Resource
		private UserTransaction ut;
		
		/**
		 * Inicia uma nova transação
		 * @throws ErroNaFaseService
		 */
		protected void beginTransaction() throws ErroNaFaseService {
			try {
				ut.begin();
			} catch (Exception e) {
				throw new ErroNaFaseService(e);
			}
		}

		/**
		 * Faz o commit da transação em andamento
		 * @throws ErroNaFaseService
		 */
		protected void commitTransaction() throws ErroNaFaseService {
			try {
				ut.commit();
			} catch (Exception e) {
				throw new ErroNaFaseService(e);
			}
		}
		
		/**
		 * Faz o rollback da transação em andamento
		 * @throws ErroNaFaseService
		 */
		protected void rollbackTransaction() throws ErroNaFaseService {
			try {
				ut.rollback();
			} catch (Exception e) {
				throw new ErroNaFaseService(e);
			}
		}
	}

	
	


